package com.java2nb.novel.pay.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * 支付下单响应实体
 */
@Data
@ApiModel(value = "PayOrderResponseVO", description = "支付下单响应实体")
public class PayOrderResponseVO {
    /**
     * 返回码（0=成功，9999=异常）
     */
    @ApiModelProperty(value = "返回码", required = true, example = "0", notes = "0=成功，9999=异常", allowableValues = "0, 9999")
    private String code;

    /**
     * 返回描述
     */
    @ApiModelProperty(value = "返回描述", required = true, example = "success", notes = "成功或失败的描述信息")
    private String msg;

    /**
     * 业务数据
     */
    @ApiModelProperty(value = "业务数据", notes = "支付订单的详细信息，成功时返回，失败时可能为null")
    private PayOrderData data;

    /**
     * 签名
     */
    @ApiModelProperty(value = "签名", example = "a1b2c3d4e5f6g7h8i9j0", notes = "响应数据的签名，用于验证数据完整性")
    private String sign;

    /**
     * 签名类型
     */
    @ApiModelProperty(value = "签名类型", required = true, example = "MD5", notes = "签名算法类型，默认MD5")
    private String signType = "MD5";

    /**
     * 业务数据内部类
     */
    @Data
    @ApiModel(value = "PayOrderData", description = "支付下单响应中的业务数据")
    public static class PayOrderData {
        /**
         * 支付中心订单号
         */
        @ApiModelProperty(value = "支付中心订单号", example = "PAY20230908123456789", notes = "支付系统生成的唯一订单号")
        private String payOrderNo;

        /**
         * 商户订单号
         */
        @ApiModelProperty(value = "商户订单号", example = "MCH20230908123456789", notes = "商户系统传入的原始订单号")
        private String mchOrderNo;

        /**
         * 支付方式
         */
        @ApiModelProperty(value = "支付方式", example = "WX_H5", notes = "支付渠道编码，与请求中的wayCode一致")
        private String wayCode;

        /**
         * 支付金额（单位：分）
         */
        @ApiModelProperty(value = "支付金额", example = "100", notes = "支付金额，单位为分，与请求中的amount一致")
        private Integer amount;

        /**
         * 支付状态（0=待支付，1=支付成功，2=支付失败）
         */
        @ApiModelProperty(value = "支付状态", example = "0", notes = "0=待支付，1=支付成功，2=支付失败", allowableValues = "0, 1, 2")
        private Integer orderState;

        /**
         * 支付参数（如支付链接、小程序参数等，JSON格式）
         */
        @ApiModelProperty(value = "支付参数", example = "{\"payUrl\":\"https://pay.example.com/wxpay?token=xxx\"}", notes = "支付所需的参数，JSON格式，根据支付方式不同内容不同")
        private String payData;

        @ApiModelProperty(value = "支付参数类型payUrl-跳转链接的方式 form-表单方式 wxapp-微信支付参数(微信公众号,小程序,app支付时) aliapp-支付宝app支付参数 ysfapp-云闪付app支付参数 codeUrl-二维码地址 codeImgUrl-二维码图片地址 none-空支付参数", example ="{\"payUrl\":\"https://pay.example.com/wxpay?token=xxx\"}" )
        private String payDataType;
        /**
         * 订单失效时间（时间戳，毫秒）
         */
        @ApiModelProperty(value = "订单失效时间", example = "1694188800000", notes = "订单失效的时间戳（毫秒），超过此时长订单无法支付")
        private Long expiredTime;
    }
}
